/**
 * 59. 螺旋矩阵 II
 * 
 * 给你一个正整数 n ，生成一个包含 1 到 n^2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
 * 
 * 示例 1：
 * 见图T59
 * 
 * 输入：n = 3
 * 输出：[[1,2,3],[8,9,4],[7,6,5]]
 * 
 * 示例 2：
 * 输入：n = 1
 * 输出：[[1]]
 * 
 * 提示：
 * 1 <= n <= 20
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/spiral-matrix-ii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * 
 */

package zw;

public class T59 {
	public int[][] generateMatrix(int n) {
		int[][] result = new int[n][n];
		int num = 1;
		int row = 0;
		int clo = 0;
		int max = n*n;
		int dir = 0;
		int cMin = 0;
		int cMax = n-1;
		int rMin = 0;
		int rMax = n-1;
		while(num <= max) {
			switch (dir) {
			// 向右
			case 0:
				result[row][clo] = num;
				clo++;
				if(clo > cMax) {
					row++;
					clo--;
					rMin++;
					dir = 1;
				}
				break;
			// 向下
			case 1:
				result[row][clo] = num;
				row++;
				if(row > rMax) {
					clo--;
					row--;
					cMax--;
					dir = 2;
				}
				break;
			// 向左
			case 2:
				result[row][clo] = num;
				clo--;
				if(clo < cMin) {
					row--;
					clo++;
					rMax--;
					dir = 3;
				}
				break;
			// 向上
			case 3:
				result[row][clo] = num;
				row--;
				if(row < rMin) {
					clo++;
					row++;
					cMin++;
					dir = 0;
				}
				break;
			}
			num++;
		}
		return result;
    }
	
	public static void main(String[] args) {
		T59 t59 = new T59();
		t59.generateMatrix(3);
	}
}
